(for Internet Explorer)
head file1.txt
file1.txt ファイルの先頭10行を表示します。
head --lines=5 file1.txt
file1.txt ファイルの先頭5行を表示します。
head --bytes=5 file1.txt
file1.txt ファイルの先頭5バイトを表示します。
参考
cat は、concatenate(連結) の略です。
cat path1
ファイルの内容を表示します。
ファイルの内容を連結します。
cat path1 path2 ... > out
cat - concatinate and print file (中略)
The word ``concatenate'' is just a verbose synonym for ``catenate''.
単語"concatinate(連結する)"は、"catenate(鎖状にする)"の冗長な同意語です。
declare out="out.txt"
cat path1 >  $out
cat path2 >> $out
リダイレクトを繰り返しても連結できます。
$ pwd
/home/user1/folder_link/test
$ pwd -P
/home/user1/folder/test
カレント・ディレクトリを表示します。
-P オプションを付けると、シンボリックリンクのリンク先になります。
PWD 環境変数
pwd を実行したときと同じ値が入っています。
PWD 変数に設定すると、実際のカレント・ディレクトリと異なるようになります。
pushd  [<olderPath>] > /dev/null
popd > /dev/null
カレント・フォルダーのパスをスタックに入れて、カレント・フォルダーを移動します。
引数省略時は、popd したときのフォルダーに移動するだけで、スタックの内容は変化しません。
pushd > /dev/null 2>&1 ||: ; pushd ||:
スタックからパスを取り出して、カレント・フォルダーを移動します。
スタックの内容を表示します。
システムのフォルダーにコピーする
システムのフォルダーにコピーするときは、管理者権限が必要です。
sudo cp a.txt /
サブ・フォルダーも含めてコピーするとき
cp -rap FolderA/* FolderB
cp -ap  FileA.txt FolderB
クリップボードの内容をファイルに格納する
cp /dev/stdin File.txt
ターミナルがクリップボードの内容を送信できる必要があります。
最後の行の改行を入力したら、Ctrl+Cを押すと確定します。
-r は、サブ・フォルダーも含める
-p は、タイムスタンプなどを維持
-a は、リンクはリンクのままコピー
-p は、タイムスタンプなどを維持
-a は、リンクはリンクのままコピー
* を含むパスは "" で囲めません
copy
ハードリンク、またはシンボリックリンクを作成します。
ln -sf  target  link
通常、シンボリックリンクを使います。
$ sudo ln -sf  /srv/tftp  /tftpboot   #// sudo は必要なときのみ
$ ls  /tftpboot
lrwxrwxrwx  user1 user1   /tftpboot -> /srv/tftp
$ ls  /tftpboot/           #// 末尾に / があると、リンク先を参照します
-rw-r--r--  user1 user1   uImage
/tftpboot にアクセスしようとすると、/src/tftp にアクセスします。
ハードリンクは、rm すると、リンク先も削除されてしまいます。
シンボリックリンクの削除は、rm コマンドで削除できます。
シンボリックリンクのリンク先は、削除されません。
相対パスのリンクを作成するときは、シンボリックリンクがあるフォルダーからの
相対パスを (target) に指定してください。
ln -sf  a.so.1  sub/a.so   #// sub/a.so は、sub/a.so.1 へのリンク
#// set up
#// work が無く、work2 フォルダーと work3 フォルダーがあるとき
ln -sf  work2  work   #// work -> work2 フォルダーのリンクを作成

#// Test Main
ln -sf  work3  work   #// work -> work3 フォルダーのリンクを作成ではなく、
                      #// work/work3 -> work3 (work/work3 へのリンク)を作成
フォルダーへのリンクを上書きすることはできません。
一度削除してから、リンクを作成してください。
#// set up
#// work が無く、work2 フォルダーと work3 フォルダーがあるとき
ln -sf  work2  work   #// work -> work2 フォルダーのリンクを作成

#// Test Main
rm  work              #// リンク元 work を削除する
ln -sf  work3  work   #// work -> work3 フォルダーのリンクを作成
サンプル
参考
rsync -av --delete  "/from_dir/"  "/to_dir"
2つのフォルダーの内容を同じ内容にします。 必要に応じてコピーや削除を行います。
/from_dir
/to_dir
from_dir の後に / が必要です
rsync -av --delete  "/from_dir"  "/to_parent_dir"
rsync -av --delete --dry-run  "/from_dir/"  "/to_dir"
比較だけする(コピーや削除する内容を確認する)
--dry-run オプションを指定
/from_dir
/to_dir
古いファイルをコピーしない(2つのフォルダーのうち新しい方を採用する)ときは、
--update オプションを指定します。
指定したファイルやフォルダーを除外するときは、--exclude オプションを使います。
rsync  -av --delete --exclude=".git"  "/from_dir"  "/to_parent_dir"
sudo で実行しないときは、所有者が自分に変わります。
vfat にコピーするときは、次のオプションを追加してください。
--no-o --no-p --no-g --safe-links --modify-window 1 --stats
--no-o because vfat does not support owners
--no-g because vfat does not support groups
--no-p because vfat does not support permissions
--modify-window 1 because fat "represents times with a 2-second resolution"
--safe-links because vfat does not support symbolic links
参考
HTTP や FTP 経由で、インターネットからファイルをダウンロードします。
wget -O "work/a.tar.bz2"  "http://www.sample.com/a.tar.bz2"
http://www.sample.com/a.tar.bz2 からダウンロードしたファイルを、work/a.tar.bz2 に
保存します。
再帰的に取得することもできます。
-O オプションに指定したファイルを格納するフォルダーが存在しないとエラーになります。
LAN などでネットワークつながっているマシンの間でファイルのコピーを行います。
scp -rp  user1@linux01:/home/user1/folder  .
scp の内部で、linux01 マシンに user1 のアカウントでログインして、
linux01 マシンの /home/user1/folder フォルダーを、
カレント・フォルダーにコピーします。
folder フォルダーができます。
rcp の暗号通信版です。
linux01 マシンからダウンロードする
LAN などでネットワークつながっているマシンの間でファイルのコピーを行います。
rcp -rp  user1@linux01:/home/user1/folder  .
user1 のアカウントで linux01 マシンにログインして、linux01 マシンの /home/user1/folder
フォルダーを、カレント・フォルダーにコピーします。
scp の使用を推奨します
mkdir -p  "$HOME/sub/sub"
ディレクトリを作成します。
-p オプションを付けると、指定したパスの親ディレクトリが無くてもエラーになりません。
if [ -e "$HOME/sub/sub" ]; then  rm -r "$HOME/sub/sub" ;fi
すでにディレクトリがあるとエラーになるため、
ディレクトリを削除するか、
エラーを発生させないようにしてください。
if [ ! -e "$HOME/sub/sub" ]; then  mkdir -p  "$HOME/sub/sub" ;fi
勝手に削除されると困るときは、mkdir だけを記述してエラーを発生させます。
ただし、いくつかのディレクトリを削除するときは、最初にまとめてチェックするとよいでしょう。
if [ -e "$HOME/sub/sub" ]; then  unset ERROR;${ERROR:?Delete directory manually} ;fi
ファイルを格納するためのディレクトリを作ります。
function  mkdir_for {
  file_path="$1"
  full_file_path=`readlink -f $file_path`
  folder_path=folder=${full_file_path%/*}  #// parent folder
  if [ ! -e "$folder_path" ];  mkdir -p  "$folder_path"  ;fi
}

mkdir  "~/sub/sub2/file.txt"
make directory
 Usage :
grep [option] string file

[option]
  複数のオプションを指定するときは、-rnp のようにアルファベットを続ける
  -i : 比較中に大文字と小文字を区別しない
  -c : パターンを含む行の数だけを表示する
  -n : 各行の先頭に、ファイルにおけるその行の行番号を出力しない
  -v : パターンを含む行を除いたすべての行を出力する
  -p : 結果出力時にファイルのパスを表示しない
  -f : 結果出力時にファイルのパスをフルパス表示する(デフォルトは相対パス表示)
  -r : サブディレクトリも再起的に検索する
  -l : ファイル名だけ表示する
  -w : ワードに完全に一致するもののみヒットさせる

string : Grep対象文字列
         正規表現可
         ex)
            grep .+[abc]+ file

file   : ファイル名
         ワイルドカード可
         ex)
            grep abc *.txt
cd (検索するフォルダ)
grep -r "keyword" * > c:\grep_out.txt
典型的なコマンド入力:
ヘルプ(Windows版?):
→ パイプとフィルタにみるUNIX哲学.htm
keyword は
ls | grep "keyword"
ls の出力のうち keyword にマッチする行だけ表示します
見るだけなら、less の検索機能の方がいいでしょう。
フィルタする:
関連
参考
→ findstr (DOS)
正規表現
です。
→ 互換性 (正規表現)
grep -r --include="*.c" "keyword" *
ファイル名をフィルターして検索
cat  "file.txt"  | grep "keyword"  #// check the keyword in file.txt
存在しなければエラーにする:
含まない行を表示する:
grep -v "keyword"
status=0
grep  "keyword"  "path" || status=$?
if [ "$status" == "0" ];then
  is_exist="1"
else
  is_exist="0"
fi
存在しているかどうか:
grep の出力から、ファイル一覧を取得する
Sub  ListupPathsFromGrepOut( GrepOutPath, out_Paths )
  Dim  f
  Dim  i_kakko_start, i_kakko_end, i_colon, i

  ReDim  out_Paths(-1)

  Set f = OpenForRead( GrepOutPath )
  Do Until  f.AtEndOfStream
    line = f.ReadLine()
    i_kakko_start = InStr( line, "(" )
    i_kakko_end   = InStr( line, ")" )
    i_colon       = InStr( line, ":" )
    If i_kakko_start > 0 and  i_kakko_end > 0 and  i_colon > 0 Then
      Do
        i = InStr( i_kakko_start+1, line, "(" )
        If i = 0 or  i > i_colon Then  Exit Do
        i_kakko_start = i
      Loop

      ReDim Preserve  out_Paths( UBound( out_Paths ) + 1 )
      out_Paths( UBound( out_Paths ) ) =  Trim( Left( line, i_kakko_start - 1 ) )
    End If
  Loop
  f = Empty
End Sub
grep の出力から、ファイル一覧を取得する VBS スクリプトです。
find "." -type f -name "*.c" -print
拡張子 .c のファイルを一覧表示する
. (ピリオド)は、カレントフォルダの意味
-type f は、ファイル。(-type d はフォルダ)
上と同じだが、かなり低速
{} はファイル名に置換される
\; は、お約束。
find "." -type f -name '*.c' -exec echo {} \;
ファイル名を検索します。 DOSの for に近い。
ファイルの種類や所有者などを検索条件に追加できます。
find "src" -type d -name 'CVS' -exec rm -r {} \;
src フォルダの中の CVS フォルダを
すべて削除する。動作注意。
find -user m-toda
ファイルのオーナーで検索する
キーワード:
オーナー、ユーザー、所有者
関連
→ find (DOS)
*.c
フォルダー名を検索する
bin, include, lib の中を、ファイル名で検索する
#!/bin/bash -e
                  #// -x option echos commands
                  #// -e option does not continue, if error was raised

find $2/usr/bin            -name "*$1*" -print
find $2/usr/include        -name "*$1*" -print
find $2/usr/lib            -name "*$1*" -print
find $2/usr/local/bin      -name "*$1*" -print
find $2/usr/local/include  -name "*$1*" -print
find $2/usr/local/lib      -name "*$1*" -print
find "." -name "*system*" -print
名前に system を含むファイルまたはフォルダーを
カレント・フォルダーから検索する
*system*
ファイルを検索する
シェル・スクリプト ~/temporary.sh
使い方
$ ~/temporary.sh  keyword
$ ~/temporary.sh  keyword  /proj/export/$USER/userland
第2引数は、ルート以外に /usr があるときのフォルダーのパス
-type を使うとき -type l を付けないと、シンボリックリンクは、ヒットしません。
-type f
一般ファイル
-type d
フォルダー(ディレクトリ)
-type l
シンボリックリンク
-type p
FIFO(?)
ソケット
-type s
複数のタイプを指定することはできません。
$ echo "ABCDABCD" | sed -e "s/ABC/xx/"
xxDABCD
参考
テキストの内容を置き換えます。
キーボードから入力した内容を置き換えて表示する
$ echo "VAR=123" | sed -e "s/VAR=//"
123
user1@pc01:~$ cp /dev/stdin ~/env.txt
A=123
BB=56
^C
user1@pc01:~$ export VAR=`grep BB= ~/env.txt | sed -e "s/.*=//"`
user1@pc01:~$ echo $VAR
56
置き換えた後のテキストに空を指定します
関連
→ 環境変数を変更するスクリプト (sed_env.sh)
$ echo "ABCDABCD" > a.txt
$ sed -i.bak -e "s/ABC/xx/" a.txt ; rm a.txt.bak
$ cat a.txt
xxDABCD
一時ファイルが必要です。
echo "a" > a.txt
echo "b" >> a.txt
echo "X" >> a.txt
cat a.txt

sed_file="a.txt"
sed_from='a\
b'
sed_to='x\
y\
z'
sed -i.bak -e '/\n/! {;$q;N;};'"s/$sed_from/$sed_to/;P;D;" \
    $sed_file ; rm $sed_file.bak

cat a.txt
a.txt
複数行を置き換えるときは、改行を \(改行) で指定します。
ただし、標準入出力は使えず、ファイルを置き換える方法しかできません。
置き換える前は2行だけ指定できます。
          a\
b
a
b
X
x
y
z
X
置き換える前後のキーワードの最後を \(改行)にすることはできません。
ABCDABCD
s/ABC/xx/
xxDABCD
s/ABC/xx/
a.txt
a.txt
一時ファイルは置き換えるファイルと
同じフォルダーにできます。
$ sed -e "s/ABC/xx/" a.txt  > b.txt
別のファイルに置き換えた内容を保存する
s/ABC/xx/
a.txt
b.txt
        x\
y\
z
ファイルの内容
$ VAR="ABCDABCD"
$ VAR=`echo "$VAR" | sed -e "s/ABC/xx/"`
# echo $VAR
xxDABCD
変数の内容を置き換える
s/ABC/xx/
xxDABCD
ファイルの内容を置き換える
$ echo "ABCDABCD" | sed -e "s/ABC/xx/"
xxDABCD
$ echo "ABCDABCD" | sed -e "s/ABC/xx/g"
xxDxxD
マッチしたテキストをすべて置き換える
ときは、最後に g を指定します
$ echo "AbcDABCD" | sed -e "s/ABC/xx/i"
xxDABCD
大文字小文字を区別しないときは
最後に i を指定します
$ echo "ABCDABCD" | sed -e "s/ABC/xx/" -e "s/xD/Z/"
xZABCD
置き換えを2回行うとき
置き換える前のテキストを指定する場所には、正規表現が使えます。
→ 正規表現
ファイルパスなど、置き換える文字に / を含むときは、s/.../.../ の / を、別の文字に
置き換えてください。
xxDABCD
s/ABC/xx/
ABCDABCD
最初にマッチしたテキストを置き換える
$ sed -e "s%~/work%~/work2%" a.txt  > b.txt
$ echo "AB(CDA)BCD" | sed -e "s/(/x/"
ABxCDA)BCD
$ echo "AB[CDA]BCD" | sed -e "s/\[/x/"
ABxCDA]BCD
[ ] を置換するときは、
\ でエスケープしてください
( ) を置換するときは、
\ でエスケープしなくてかまいません。
stream editor
sed は、短縮形のスクリプトです。
$ echo  "ABC" > tmp.txt
$ sed  -e "s/B/x/;s/C/y/" tmp.txt
Axy
s関数( "B", "x" );
s関数( "C", "y" );
文と文の間は ; で区切ることができます
   :
$ sed  -e " s/B/x/; s/C/y/ " tmp.txt
処理に影響しない空白文字を含むことが
できます。
$ echo -e  "ABC\nABCD\nABCD" > tmp.txt
$ sed  -e "/D/s/B/x/" tmp.txt
ABC
AxCD
AxCD
/ から始まるときは、/ と / の間の文字列が含まれる行に対して処理が行われます。
複数行にマッチしたときは、そのマッチしたそれぞれの行に対して処理が行われます。
ただし、多くの場合、アドレス指定しなくても、変換前のパターン・マッチングによって
処理する行が正しく指定できます。
関数(上記の s/B/x/ )の前に /keyword/ があるとき、keyword にマッチする行を指定
したことになります。 このように行を指定するものを、sed では「アドレス」と呼んでいます。
$ echo -e "ABCD\tABCD" | sed -e "s/D\tA/xx/"
ABCxxBCD
タブ文字は \t
(echo の -e は、\t をタブ文字に
置き換えます。)
/D/
sed  -e "/D/s%B%x%" tmp.txt
s の直後が / 以外のときでも、アドレスの部分は、/ のままにしてください。
/D/
参考
$ echo -e "ABCDABCD" | sed -e "s/A.*D/xx/"
xx
.* のワイルドカードが複数にマッチ
する場合、最も大きくマッチしたもの
が採用されます。 (xxABCD にならない)
参考
$ echo -e " abc\n def\n ghi" | sed -e "/e/d"
 abc
 ghi
e を含む行を削除します
$ cat "table.txt" | sed -e "2,4d"
2行目〜3行目(4-1)まで削除します。
$ cat "table.txt" | sed -e '/---/,$d'
--- がある行から最終行まで削除します。